﻿Imports CrystalDecisions.CrystalReports.Engine

Public Class frmOperacja

    Private mvarDbHolder As clsDataBase
    Private mvarUzytkownik As clsUzytkownik
    Private mvarPozycjaSchematu As Collection(Of clsInhTrPozycjeSchematu)
    Private mvarSchemat As clsTrSzukanie
    Private mvarDrut As clsTrSzukanie
    Private mvarSchematId As Integer
    Private mvarPozycjaSchematuId As Integer
    Private mvarWyznMaterialProdukcyjny As Boolean
    Private mvarBlokowanie As clsRecordLock
    Private mvarWyznTylkoDoOdczytu As Boolean = False
    Private mvarLblList As List(Of Label)
    Private mvarTextList As List(Of TextBox)
    Private mvarKomunikat As String
    Private mvarWyznZmianyZaznaczeniaLstRodzic As Boolean = True
    Private mvarWyznZmianyZaznaczeniaLstPotomek As Boolean = True
    Private mvarPraconikId As Integer

    Public Sub New(PozycjaSchematu As Collection(Of clsInhTrPozycjeSchematu), PracownikId As Integer)
        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)
        mvarUzytkownik = CType(clsUzytkownik.Instance(), clsUzytkownik)
        mvarPozycjaSchematu = PozycjaSchematu
        mvarPraconikId = PracownikId
        mvarLblList = New List(Of Label)
        mvarTextList = New List(Of TextBox)

        UzupelnijDane()
        Blokowanie()

    End Sub

    Private Sub Blokowanie()

        mvarBlokowanie = New clsRecordLock(VAR_CONNECTION_PARAMETERS, mvarPozycjaSchematuId, "tracking.pozycje_schematu", VAR_ERROR_HANDLER, CInt(mvarUzytkownik.Id))
        If Not mvarBlokowanie.RecordLocked Then
            mvarWyznTylkoDoOdczytu = True
            MessageBox.Show("TYLKO DO ODCZYT.", "WIREMET")
            grbTylkoDoOdczytu.Visible = True
            grbPrzyciski.Enabled = False
        End If

    End Sub


#Region "Pobierz"

    Private Sub PobierzWszystkieMaszyny()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsMaszyna.PobierzWszystkieMaszyny(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbMaszyna.Items.Add(New clsMaszyna(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("opis")), String.Empty, lvarRow("opis"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_1")), -1, lvarRow("wydluzenie_2"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_2")), -1, lvarRow("wydluzenie_2"))), CInt(IIf(IsDBNull(lvarRow("grupa_maszyny_id")), -1, lvarRow("grupa_maszyny_id"))), CInt(IIf(IsDBNull(lvarRow("ilosc_kamieni")), -1, lvarRow("ilosc_kamieni")))))
            Next
        End If

    End Sub


    Private Sub PobierzWszystkieMaszynyGrupy(Id As Integer)

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsInhMaszyna.PobierzWszystkieMaszynyGrupy(mvarDbHolder, Id)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbMaszyna.Items.Add(New clsMaszyna(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("opis")), String.Empty, lvarRow("opis"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_1")), -1, lvarRow("wydluzenie_2"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_2")), -1, lvarRow("wydluzenie_2"))), CInt(IIf(IsDBNull(lvarRow("grupa_maszyny_id")), -1, lvarRow("grupa_maszyny_id"))), CInt(IIf(IsDBNull(lvarRow("ilosc_kamieni")), -1, lvarRow("ilosc_kamieni")))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkichPracownikow()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPracownik.PobierzWszystkichPracownikow(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                If CBool(lvarRow("aktywny")) Then
                    cmbPracownik.Items.Add(New clsPracownik(lvarRow("id").ToString(), CStr(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("imie")), String.Empty, lvarRow("imie"))), CStr(IIf(IsDBNull(lvarRow("nazwisko")), String.Empty, lvarRow("nazwisko"))), CStr(IIf(IsDBNull(lvarRow("login")), String.Empty, lvarRow("login"))), CStr(IIf(IsDBNull(lvarRow("haslo")), String.Empty, lvarRow("haslo"))), CBool(IIf(IsDBNull(lvarRow("aktywny")), String.Empty, lvarRow("aktywny")))))
                End If
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieOpakowania()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPakowanie.PobierzWszystkieOpcje(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbPakowanie.Items.Add(New clsPakowanie(lvarRow("id").ToString(), CType(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa")), String), CType(IIf(IsDBNull(lvarRow("cena")), 0, lvarRow("cena")), Double), CType(IIf(IsDBNull(lvarRow("waga")), 0, lvarRow("waga")), Double)))
            Next
        End If

    End Sub

#End Region

    Private Sub Wyczysc()

        txtTemperatura.Text = String.Empty
        txtPredkoscMaszyny.Text = String.Empty
        txtWymiarMin.Text = String.Empty
        txtWymiarMax.Text = String.Empty
        txtUwagi.Text = String.Empty
        chkProdukcja.Checked = False
        chkMagazyn.Checked = False
        chkKosz.Checked = False
        chkKontrola.Checked = False
        If mvarLblList.Count <> 0 Then
            For j As Integer = 0 To mvarTextList.Count - 1
                grbPoleEdycji.Controls.Remove(mvarLblList.Item(j))
                grbPoleEdycji.Controls.Remove(mvarTextList.Item(j))
                If j <> mvarTextList.Count - 1 Then
                    mvarLblList.Item(j).Location = New Point(210, mvarTextList.Item(mvarTextList.Count - 1).Location.Y - 28)
                    mvarTextList.Item(j).Location = New Point(262, mvarTextList.Item(mvarTextList.Count - 1).Location.Y - 28)
                    grbInformacje.Height = grbInformacje.Height - 28
                    grbPoleEdycji.Height = grbPoleEdycji.Height - 28
                    grbPrzyciski.Location = New Point(grbPrzyciski.Location.X, grbPrzyciski.Location.Y - 28)
                    pnlPoleEdycji.Location = New Point(pnlPoleEdycji.Location.X, pnlPoleEdycji.Location.Y - 28)
                    Me.Height = CInt(Me.Height - 28)
                End If
            Next
            mvarLblList.Clear()
            mvarTextList.Clear()
        End If
        mvarWyznZmianyZaznaczeniaLstRodzic = True
        grbInformacje.Enabled = False

    End Sub

    Private Sub AktywnoscGrbDaneMaszyny()

        grbInformacje.Enabled = True
        If UCase(Trim(txtMaszyna.Text)) = "PIEC" Then
            txtTemperatura.Enabled = True
            txtPredkoscMaszyny.Enabled = False
        Else
            txtTemperatura.Enabled = False
            txtPredkoscMaszyny.Enabled = True
        End If

    End Sub


    Function SprawdzPodaneLiczby() As Boolean

        Dim lvarWyzn As Boolean
        Dim lvarParametMaszyny As String

        If txtMaszyna.Text = "PIEC" Then
            lvarParametMaszyny = txtTemperatura.Text
        Else
            lvarParametMaszyny = txtPredkoscMaszyny.Text
        End If

        If txtWymiarMin.Text <> String.Empty And IsNumeric(txtWymiarMin.Text) And txtWymiarMax.Text <> String.Empty And IsNumeric(txtWymiarMax.Text) And lvarParametMaszyny <> String.Empty And IsNumeric(lvarParametMaszyny) Then
            If CDbl(txtWymiarMin.Text) > 0 And CDbl(txtWymiarMax.Text) > 0 And CDbl(lvarParametMaszyny) > 0 Then
                lvarWyzn = True
            Else
                lvarWyzn = False
            End If
        Else
            lvarWyzn = False
        End If

        If mvarTextList.Count <> 0 Then
            For j As Integer = 0 To mvarTextList.Count - 1
                If mvarTextList.Item(j).Text <> String.Empty And IsNumeric(mvarTextList.Item(j).Text) Then
                    If CDbl(mvarTextList.Item(j).Text) < 0 Then
                        lvarWyzn = False
                        Exit For
                    End If
                Else
                    lvarWyzn = False
                    Exit For
                End If
            Next

        End If

        If Not chkProdukcja.Checked And Not chkMagazyn.Checked And Not chkKosz.Checked And Not chkKontrola.Checked Then
            lvarWyzn = False
        End If

        If lvarWyzn Then
            Return True
        Else
            Return False
        End If

    End Function

    Function SprawdzWage(WyznZmiany As Boolean) As Boolean

        Dim lvarWyzn As Boolean = True

        For i As Integer = 0 To mvarTextList.Count - 1
            If mvarWyznMaterialProdukcyjny Then
                If ObliczAktualnaWageRodzica(CType(mvarTextList.Item(i).Tag, clsInhTrMaterialProdukcyjny), WyznZmiany) < CDbl(mvarTextList.Item(i).Text) Then
                    lvarWyzn = False
                    mvarKomunikat = CType(mvarTextList.Item(i).Tag, clsInhTrMaterialProdukcyjny).Id.ToString()
                    Exit For
                End If
            Else
                If ObliczAktualnaWageRodzica(CType(mvarTextList.Item(i).Tag, clsInhTrDrut), WyznZmiany) < CDbl(mvarTextList.Item(i).Text) Then
                    lvarWyzn = False
                    mvarKomunikat = CType(mvarTextList.Item(i).Tag, clsInhTrDrut).Id.ToString()
                    Exit For
                End If
            End If
        Next

        If lvarWyzn Then
            Return True
        Else
            Return False
        End If

    End Function

    Function ObliczWageRodzica(Drut As clsInhTrDrut) As Double

        Dim lvarReturn As Double

        For Each lvarDrut As clsTrRodzic In Drut.Rodzic
            lvarReturn = lvarReturn + CDbl(lvarDrut.Waga)
        Next
        Return lvarReturn

    End Function

    Function ObliczAktualnaWageRodzica(Drut As clsInhTrMaterialProdukcyjny, WyznZmiany As Boolean) As Double

        Dim lvarReturn1 As Double
        Dim lvarReturn2 As Double

        lvarReturn1 = lvarReturn1 + CDbl(CType(Drut, clsInhTrMaterialProdukcyjny).Ilosc)

        For Each lvar As clsInhTrDrut In lstPotomek.Items
            For Each lvarDrut As clsTrRodzic In lvar.Rodzic
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 + CDbl(Replace(lvarDrut.Waga, ".", ","))
                End If
            Next
        Next

        If WyznZmiany Then
            For Each lvarDrut As clsTrRodzic In lstPotomek.SelectedItems
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 - CDbl(lvarDrut.Waga)
                End If
            Next
        End If

        Return lvarReturn1 - lvarReturn2

    End Function

    Function ObliczAktualnaWageRodzica(Drut As clsInhTrDrut, WyznZmiany As Boolean) As Double

        Dim lvarReturn1 As Double
        Dim lvarReturn2 As Double

        For Each lvarDrut As clsTrRodzic In Drut.Rodzic
            lvarReturn1 = lvarReturn1 + CDbl(Replace(lvarDrut.Waga, ".", ","))
        Next

        For Each lvar As clsInhTrDrut In lstPotomek.Items
            For Each lvarDrut As clsTrRodzic In lvar.Rodzic
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 + CDbl(Replace(lvarDrut.Waga, ".", ","))
                End If
            Next
        Next

        If WyznZmiany Then
            For Each lvarDrut As clsTrRodzic In lstPotomek.SelectedItems
                If lvarDrut.DrutRodzicId = Drut.Id Then
                    lvarReturn2 = lvarReturn2 - CDbl(Replace(lvarDrut.Waga, ".", ","))
                End If
            Next
        End If

        Return lvarReturn1 - lvarReturn2

    End Function

    Function ObliczWagePotomkow() As Double

        Dim lvarReturn2 As Double

        For Each lvar As clsInhTrDrut In lstPotomek.Items
            For Each lvarDrut As clsTrRodzic In lvar.Rodzic
                lvarReturn2 = lvarReturn2 + CDbl(lvarDrut.Waga)
            Next
        Next

        Return lvarReturn2

    End Function


    Private Sub UzupelnijDane()

        Dim lvarCommand1 As String
        Dim lvarIndex As Integer
        txtIlosc.Text = "0,00"

        For Each lvarPozycja As clsInhTrPozycjeSchematu In mvarPozycjaSchematu
            grbSchemat.Text = "Schemat o numerze " & lvarPozycja.SchematId & " - numer operacji " & lvarPozycja.Id
            For Each lvarMaszyna As clsInhTrMaszynaPozycjiSchematu In lvarPozycja.Maszyny
                txtMaszyna.Text = txtMaszyna.Text & lvarMaszyna.Maszyna.Nazwa
            Next
            txtPracownik.Text = lvarPozycja.Pracownik.Nazwisko
            txtWymiarWejsciowy.Text = lvarPozycja.WymiarWejsciowy
            txtWymiarKoncowy.Text = lvarPozycja.WymiarKoncowy
            txtOpakowanie.Text = lvarPozycja.Pakowanie.Nazwa
            If lvarPozycja.GrupaMaszynyId <> "null" Then
                PobierzWszystkieMaszynyGrupy(CInt(lvarPozycja.GrupaMaszynyId))
            End If
            mvarSchematId = CInt(lvarPozycja.SchematId)
            mvarPozycjaSchematuId = lvarPozycja.Id
        Next

        mvarDrut = New clsTrSzukanie

        'Szukanie poprzedzajacej pozycji schematu
        mvarDrut.SzukajIdPozycjiSchematu(mvarDbHolder, mvarPozycjaSchematuId, mvarSchematId)
        For i As Integer = 0 To mvarDrut.PozycjeSchematuIdTab.Rows.Count - 1
            'MessageBox.Show(mvarDrut.PozycjeSchematuIdTab.Rows(i)("id"))
            If CInt(mvarDrut.PozycjeSchematuIdTab.Rows(i)("id")) = mvarPozycjaSchematuId AndAlso i <> 0 Then
                lvarCommand1 = mvarDrut.PozycjeSchematuIdTab.Rows(i - 1)("id").ToString()
                lvarIndex = i - 1
                Exit For
            End If
        Next

        'Uzupelnienie listy drutow-rodzic
        If lvarIndex = 0 Then
            mvarDrut.SzukajDrutuRodzica1(mvarDbHolder, mvarSchematId.ToString())
            If mvarDrut.MaterialProdukcyjny.Count = 0 Then
                MessageBox.Show("Nie ma jeszcze drutu do przeprowadzenia danej operacji.", "WIREMET")
            Else
                For Each lvarDrutRodzic As clsInhTrMaterialProdukcyjny In mvarDrut.MaterialProdukcyjny
                    lstRodzic.Items.Add(lvarDrutRodzic)

                    txtIlosc.Text = CStr(CDbl(txtIlosc.Text) + CDbl(lvarDrutRodzic.Ilosc))
                Next
                mvarWyznMaterialProdukcyjny = True
            End If
        Else
            mvarDrut.SzukajDrutuRodzica2(mvarDbHolder, mvarDrut.PozycjeSchematuIdTab.Rows(lvarIndex)("id").ToString(), False)
            If mvarDrut.Drut.Count = 0 Then
                MessageBox.Show("Nie ma jeszcze drutu do przeprowadzenia danej operacji.", "WIREMET")
            Else
                For Each lvarDrutRodzic As clsInhTrDrut In mvarDrut.Drut
                    lstRodzic.Items.Add(lvarDrutRodzic)

                    txtIlosc.Text = CStr(CDbl(txtIlosc.Text) + ObliczWageRodzica(lvarDrutRodzic))
                Next
                mvarWyznMaterialProdukcyjny = False
            End If
        End If

        'Uzupelnienie listy drutow-potomek
        mvarDrut = New clsTrSzukanie
        mvarDrut.SzukajDrutuRodzica2(mvarDbHolder, mvarPozycjaSchematuId.ToString(), False)
        If mvarDrut.Drut.Count <> 0 Then
            For Each lvarDrutPotomek As clsInhTrDrut In mvarDrut.Drut
                lstPotomek.Items.Add(lvarDrutPotomek)
            Next
        End If

        lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId).ToString(), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")
        PobierzWszystkichPracownikow()
        PobierzWszystkieOpakowania()

        If mvarPraconikId <> 0 Then
            For I As Integer = 0 To cmbPracownik.Items.Count - 1
                If CType(cmbPracownik.Items(I), clsPracownik).Numer = mvarPraconikId.ToString() Then
                    Me.Text = Me.Text & " - zalogowany(a): " & CType(cmbPracownik.Items(I), clsPracownik).Nazwisko
                    Exit For
                End If
            Next
        End If

    End Sub

    Private Sub UzupelnijListeDrutowPotomkowych()
        lstPotomek.Items.Clear()
        'Uzupelnienie listy drutow-potomek
        mvarDrut = New clsTrSzukanie
        mvarDrut.SzukajDrutuRodzica2(mvarDbHolder, mvarPozycjaSchematuId.ToString(), False)
        If mvarDrut.Drut.Count <> 0 Then
            For Each lvarDrutPotomek As clsInhTrDrut In mvarDrut.Drut
                lstPotomek.Items.Add(lvarDrutPotomek)
            Next
            '   mvarWyznMaterialProdukcyjny = False
        End If
    End Sub


    Private Sub Dodaj()

        mvarDbHolder.BeginTrans()
        Dim lvarDrut As New clsInhTrDrut()
        With lvarDrut
            .DataUtworzenia = Now.Date
            .PozycjeSchematuProdukcjiId = mvarPozycjaSchematuId
            .PracownikId = Integer.Parse(CType(cmbPracownik.SelectedItem, clsPracownik).Id)
            .MaszynaId = CType(cmbMaszyna.SelectedItem, clsMaszyna).Id
            .PakowanieId = Integer.Parse(CType(cmbPakowanie.SelectedItem, clsPakowanie).Id)
            .WymiarMin = Replace(txtWymiarMin.Text, ",", ".")
            .WymiarMax = Replace(txtWymiarMax.Text, ",", ".")
            .Uwagi = txtUwagi.Text
            If txtMaszyna.Text = "PIEC" Then
                .ParametrMaszyny = Replace(txtTemperatura.Text, ",", ".")
            Else
                .ParametrMaszyny = Replace(txtPredkoscMaszyny.Text, ",", ".")
            End If
            If chkProdukcja.Checked Then
                .OpcjaId = 1
            ElseIf chkMagazyn.Checked Then
                .OpcjaId = 2
            ElseIf chkKosz.Checked Then
                .OpcjaId = 3
            Else
                .OpcjaId = 4
            End If
        End With

        For i As Integer = 0 To mvarTextList.Count - 1
            Dim lvarRodzic As New clsTrRodzic()
            With lvarRodzic
                If mvarWyznMaterialProdukcyjny Then
                    .WyznMaterialProdukcyjny = True
                    .DrutRodzicId = CType(mvarTextList.Item(i).Tag, clsInhTrMaterialProdukcyjny).Id 'lstRodzic.Items(i).ToString
                Else
                    .WyznMaterialProdukcyjny = False
                    .DrutRodzicId = CType(mvarTextList.Item(i).Tag, clsInhTrDrut).Id 'lstRodzic.Items(i).ToString
                End If
                .Waga = Replace(mvarTextList.Item(i).Text, ",", ".")
            End With
            lvarDrut.Rodzic.Add(lvarRodzic)
        Next

        lvarDrut.Save(mvarDbHolder)

        mvarDbHolder.CommitTrans()

        lstPotomek.Items.Add(lvarDrut)
        lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId).ToString(), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")

        If Not chkKosz.Checked Then
            Drukuj(clsTrSzukanie.SzukajMaterialuProdukcyjnegoPotomka(mvarDbHolder, lvarDrut.Id.ToString()), lvarDrut.Id)
        End If

        Wyczysc()


    End Sub

    Private Sub Zmien()

        If lstPotomek.SelectedItems.Count > 0 Then

            mvarDbHolder.BeginTrans()

            With CType(lstPotomek.SelectedItem, clsInhTrDrut)
                .DataUtworzenia = Now.Date
                .PozycjeSchematuProdukcjiId = mvarPozycjaSchematuId
                .PracownikId = CInt(CType(cmbPracownik.SelectedItem, clsPracownik).Id)
                .MaszynaId = CType(cmbMaszyna.SelectedItem, clsMaszyna).Id
                .PakowanieId = CInt(CType(cmbPakowanie.SelectedItem, clsPakowanie).Id)
                .WymiarMin = Replace(txtWymiarMin.Text, ",", ".")
                .WymiarMax = Replace(txtWymiarMax.Text, ",", ".")
                .Uwagi = txtUwagi.Text
                If txtMaszyna.Text = "PIEC" Then
                    .ParametrMaszyny = Replace(txtTemperatura.Text, ",", ".")
                Else
                    .ParametrMaszyny = Replace(txtPredkoscMaszyny.Text, ",", ".")
                End If
                If chkProdukcja.Checked Then
                    .OpcjaId = 1
                ElseIf chkMagazyn.Checked Then
                    .OpcjaId = 2
                ElseIf chkKosz.Checked Then
                    .OpcjaId = 3
                Else
                    .OpcjaId = 4
                End If
            End With

            For Each lvarPozycja As clsTrRodzic In CType(lstPotomek.SelectedItem, clsInhTrDrut).Rodzic
                CType(lstPotomek.SelectedItem, clsInhTrDrut).RodzicDel.Add(lvarPozycja)
            Next
            CType(lstPotomek.SelectedItem, clsInhTrDrut).Rodzic.Clear()
            For i As Integer = 0 To mvarTextList.Count - 1
                Dim lvarRodzic As New clsTrRodzic()
                With lvarRodzic
                    If mvarWyznMaterialProdukcyjny Then
                        .WyznMaterialProdukcyjny = True
                        .DrutRodzicId = CType(mvarTextList.Item(i).Tag, clsInhTrMaterialProdukcyjny).Id 'lstRodzic.Items(i).ToString
                    Else
                        .WyznMaterialProdukcyjny = False
                        .DrutRodzicId = CType(mvarTextList.Item(i).Tag, clsInhTrDrut).Id 'lstRodzic.Items(i).ToString
                    End If
                    .Waga = Replace(mvarTextList.Item(i).Text, ",", ".")
                End With
                CType(lstPotomek.SelectedItem, clsInhTrDrut).Rodzic.Add(lvarRodzic)
            Next

            CType(lstPotomek.SelectedItem, clsInhTrDrut).Save(mvarDbHolder)

            mvarDbHolder.CommitTrans()

            Wyczysc()
            UzupelnijListeDrutowPotomkowych()
            lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId).ToString(), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",")
            '    Drukuj(clsTrSzukanie.SzukajMaterialuProdukcyjnegoPotomka(mvarDbHolder, CType(lstPotomek.SelectedItem, clsInhTrDrut).Id), CType(lstPotomek.SelectedItem, clsInhTrDrut).Id)
        End If

    End Sub

    Private Sub Drukuj(IdMaterialuProdykcyjnego As Integer, IdDrut As Integer)
        Try

            Dim etykietaProdukcjaReport As New EtykietaProdukcjaReport()
            etykietaProdukcjaReport.SetParameterValue("p_id", IdMaterialuProdykcyjnego)
            etykietaProdukcjaReport.SetParameterValue("p_id_drut", IdDrut)
            etykietaProdukcjaReport.PrintToPrinter(1, False, 0, 0)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub Usun()

        If lstPotomek.SelectedItems.Count > 0 Then

            mvarDbHolder.BeginTrans()
            CType(lstPotomek.SelectedItem, clsInhTrDrut).Delete(mvarDbHolder)
            mvarDbHolder.CommitTrans()

            UzupelnijListeDrutowPotomkowych()
            lblLiczba1.Text = Replace(clsInhTrDrut.PobierzIloscDrutu(mvarDbHolder, mvarPozycjaSchematuId).ToString(), ".", ",") & " / " & Replace(txtIlosc.Text, ".", ",") 'Replace(mvarDrut.IloscMaterialuProdukcyjnyego, ".", ",")
            Wyczysc()
            mvarWyznZmianyZaznaczeniaLstRodzic = False
            lstRodzic.ClearSelected()
            mvarWyznZmianyZaznaczeniaLstRodzic = True

        End If

    End Sub


    Private Sub cmdDodaj_Click(sender As Object, e As EventArgs) Handles cmdDodaj.Click

        If SprawdzPodaneLiczby() Then
            If SprawdzWage(False) Then
                Dodaj()
                lstRodzic.ClearSelected()
                mvarWyznZmianyZaznaczeniaLstRodzic = True
            Else
                MessageBox.Show("Nie zgadza się waga dla drutu o numerze " & mvarKomunikat & ".", "WIREMET")
            End If
        Else
            MessageBox.Show("Podaj wszystkie dane poprawnie.", "WIREMET")
        End If

    End Sub

    Private Sub cmdZmien_Click(sender As Object, e As EventArgs) Handles cmdZmien.Click

        If lstPotomek.SelectedItems.Count > 0 Then
            If SprawdzPodaneLiczby() Then
                If SprawdzWage(True) Then
                    Zmien()
                    lstRodzic.ClearSelected()
                    mvarWyznZmianyZaznaczeniaLstRodzic = True
                Else
                    MessageBox.Show("Nie zgadza się waga dla drutu o numerze " & mvarKomunikat & ".", "WIREMET")
                End If
            Else
                MessageBox.Show("Podaj wszystkie dane poprawnie.", "WIREMET")
            End If
        Else
            MessageBox.Show("Wybierz drut-potomek.", "WIREMET")
        End If

    End Sub

    Private Sub cmdUsun_Click(sender As Object, e As EventArgs) Handles cmdUsun.Click
        If lstPotomek.SelectedItems.Count > 0 Then
            Usun()
        Else
            MessageBox.Show("Wybierz drut-potomek", "WIEREMET")
        End If
    End Sub

    Private Sub cmdDrukuj_Click(sender As Object, e As EventArgs) Handles cmdDrukuj.Click

        If lstPotomek.SelectedItems.Count > 0 Then
            Drukuj(clsTrSzukanie.SzukajMaterialuProdukcyjnegoPotomka(mvarDbHolder, CType(lstPotomek.SelectedItem, clsInhTrDrut).Id.ToString()), CType(lstPotomek.SelectedItem, clsInhTrDrut).Id)
        Else
            MessageBox.Show("Wybierz drut-potomek.", "WIREMET")
        End If

    End Sub

    Private Sub cmdSchemat_Click(sender As Object, e As EventArgs) Handles cmdSchemat.Click

        Dim lvarCommand As String
        Dim lvarKlient As String
        Dim lvarTermin As String
        Dim lvarPozycjaZleceniaId As Integer
        lvarCommand = "AND schemat.id = " & mvarSchematId

        mvarSchemat = New clsTrSzukanie
        mvarSchemat.SzukajSchematu(mvarDbHolder, lvarCommand)

        For Each lvarRow As DataRow In mvarSchemat.SchematTab.Rows
            lvarKlient = lvarRow.Item("klient").ToString()
            lvarTermin = CType(lvarRow.Item("termin"), Date).ToShortDateString
            lvarPozycjaZleceniaId = CInt(lvarRow.Item("pozycja_zlecenia_id"))
        Next


        Dim lvarFrm As New frmTrPozycjaZlecenia(lvarKlient, lvarTermin, lvarPozycjaZleceniaId, mvarSchematId, mvarPozycjaSchematuId, True, False)
        With lvarFrm
            .MdiParent = mdiMain.ActiveForm
            .Show()
        End With

    End Sub

    Private Sub cmdWyczysc_Click(sender As Object, e As EventArgs) Handles cmdWyczysc.Click

        If lstRodzic.SelectedItems.Count > 0 Then
            lstRodzic.ClearSelected()
        End If
        If lstPotomek.SelectedItems.Count > 0 Then
            lstPotomek.ClearSelected()
        End If
        Wyczysc()

    End Sub

    Private Sub lstRodzic_KeyPress(sender As Object, e As KeyPressEventArgs) Handles lstRodzic.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then

        End If
    End Sub

    Private Sub ZaznaczenieLstRodzic()

        Dim lvarIndex As Integer
        Dim lvarWyzn As Boolean

        If lstRodzic.SelectedItems.Count > mvarTextList.Count Then
            Select Case lstRodzic.SelectedItems.Count
                Case 1
                    Wyczysc()
                    If mvarPraconikId <> 0 Then
                        For I As Integer = 0 To cmbPracownik.Items.Count - 1
                            If CInt(CType(cmbPracownik.Items(I), clsPracownik).Numer) = mvarPraconikId Then
                                cmbPracownik.SelectedIndex = I
                                Exit For
                            End If
                        Next
                    Else
                        lvarIndex = cmbPracownik.FindString(mvarUzytkownik.Nazwisko)
                        cmbPracownik.SelectedIndex = lvarIndex
                    End If
                    lvarIndex = cmbMaszyna.FindString(txtMaszyna.Text)
                    cmbMaszyna.SelectedIndex = lvarIndex
                    lvarIndex = cmbPakowanie.FindString(txtOpakowanie.Text)
                    cmbPakowanie.SelectedIndex = lvarIndex
                    AktywnoscGrbDaneMaszyny()

                    Dim lvarLbl As New Label
                    Dim lvarText As New TextBox()
                    lvarLbl.Location = New Point(187, 46 + 28)
                    lvarText.Location = New Point(262, 46 + 28)
                    lvarLbl.Size = New Size(67, 20)
                    lvarText.Size = New Size(94, 20)
                    lvarText.Font = New Font(Me.Font, FontStyle.Bold)


                    grbPoleEdycji.Controls.Add(lvarLbl)
                    grbPoleEdycji.Controls.Add(lvarText)

                    If mvarWyznMaterialProdukcyjny Then
                        lvarLbl.Text = "waga(" & CType(lstRodzic.SelectedItem, clsInhTrMaterialProdukcyjny).Id & "):"
                        lvarText.Tag = New clsInhTrMaterialProdukcyjny()
                    Else
                        lvarLbl.Text = "waga(" & CType(lstRodzic.SelectedItem, clsInhTrDrut).Id & "):"
                        lvarText.Tag = New clsInhTrDrut()
                    End If

                    lvarText.Tag = lstRodzic.SelectedItem
                    mvarLblList.Add(lvarLbl)
                    mvarTextList.Add(lvarText)

                Case Is > 1
                    For i As Integer = 0 To lstRodzic.Items.Count - 1
                        If lstRodzic.GetSelected(i) Then ' SPRAWDZENIE CZY DRUT-RODZIC JEST ZAZNACZONY
                            For j As Integer = 0 To mvarTextList.Count - 1 'SPRAWDZENIE CZY JEST JUZ W TEXTBOX
                                If mvarWyznMaterialProdukcyjny Then
                                    If CType(mvarTextList.Item(j).Tag, clsInhTrMaterialProdukcyjny).Id = CType(lstRodzic.Items(i), clsInhTrMaterialProdukcyjny).Id Then
                                        lvarWyzn = True
                                        Exit For
                                    Else
                                        lvarWyzn = False
                                    End If
                                Else
                                    If CType(mvarTextList.Item(j).Tag, clsInhTrDrut).Id = CType(lstRodzic.Items(i), clsInhTrDrut).Id Then
                                        lvarWyzn = True
                                        Exit For
                                    Else
                                        lvarWyzn = False
                                    End If
                                End If
                            Next

                            If Not lvarWyzn Then
                                Dim lvarLbl As New Label
                                Dim lvarText As New TextBox()
                                lvarLbl.Location = New Point(187, mvarTextList.Item(mvarTextList.Count - 1).Location.Y + 28)
                                lvarText.Location = New Point(262, mvarTextList.Item(mvarTextList.Count - 1).Location.Y + 28)
                                lvarLbl.Size = New Size(67, 20)
                                lvarText.Size = New Size(94, 20)

                                grbInformacje.Height = grbInformacje.Height + 28
                                grbPoleEdycji.Height = grbPoleEdycji.Height + 28
                                grbPrzyciski.Location = New Point(grbPrzyciski.Location.X, grbPrzyciski.Location.Y + 28)
                                pnlPoleEdycji.Location = New Point(pnlPoleEdycji.Location.X, pnlPoleEdycji.Location.Y + 28)
                                Me.Height = CInt(Me.Height + 28)

                                grbPoleEdycji.Controls.Add(lvarLbl)
                                grbPoleEdycji.Controls.Add(lvarText)


                                If mvarWyznMaterialProdukcyjny Then
                                    lvarLbl.Text = "waga(" & CType(lstRodzic.Items(i), clsInhTrMaterialProdukcyjny).Id & "):"
                                    lvarText.Tag = New clsInhTrMaterialProdukcyjny()
                                Else
                                    lvarLbl.Text = "waga(" & CType(lstRodzic.Items(i), clsInhTrDrut).Id & "):"
                                    lvarText.Tag = New clsInhTrDrut()
                                End If
                                lvarText.Tag = lstRodzic.Items(i)
                                mvarLblList.Add(lvarLbl)
                                mvarTextList.Add(lvarText)
                                Exit For
                            End If
                        End If
                    Next
            End Select
        Else

            For j As Integer = 0 To mvarTextList.Count - 1
                For i As Integer = 0 To lstRodzic.Items.Count - 1
                    If lstRodzic.GetSelected(i) Then
                        If mvarWyznMaterialProdukcyjny Then
                            If CType(mvarTextList.Item(j).Tag, clsInhTrMaterialProdukcyjny).Id = CType(lstRodzic.Items(i), clsInhTrMaterialProdukcyjny).Id Then
                                lvarWyzn = True
                                Exit For
                            End If
                        Else
                            If CType(mvarTextList.Item(j).Tag, clsInhTrDrut).Id = CType(lstRodzic.Items(i), clsInhTrDrut).Id Then
                                lvarWyzn = True
                                Exit For
                            End If
                        End If

                    End If
                    lvarWyzn = False
                Next
                If Not lvarWyzn Then
                    grbPoleEdycji.Controls.Remove(mvarLblList.Item(j))
                    grbPoleEdycji.Controls.Remove(mvarTextList.Item(j))
                    mvarLblList.Remove(mvarLblList.Item(j))
                    mvarTextList.Remove(mvarTextList.Item(j))

                    If j = mvarTextList.Count Then
                        If mvarTextList.Count <> 0 Then
                            grbInformacje.Height = grbInformacje.Height - 28
                            grbPoleEdycji.Height = grbPoleEdycji.Height - 28
                            grbPrzyciski.Location = New Point(grbPrzyciski.Location.X, grbPrzyciski.Location.Y - 28)
                            pnlPoleEdycji.Location = New Point(pnlPoleEdycji.Location.X, pnlPoleEdycji.Location.Y - 28)
                            Me.Height = CInt(Me.Height - 28)
                        End If

                    Else
                        For k As Integer = j To mvarTextList.Count - 1
                            mvarLblList.Item(k).Location = New Point(187, mvarTextList.Item(k).Location.Y - 28)
                            mvarTextList.Item(k).Location = New Point(262, mvarTextList.Item(k).Location.Y - 28)
                        Next
                        grbInformacje.Height = grbInformacje.Height - 28
                        grbPoleEdycji.Height = grbPoleEdycji.Height - 28
                        grbPrzyciski.Location = New Point(grbPrzyciski.Location.X, grbPrzyciski.Location.Y - 28)
                        pnlPoleEdycji.Location = New Point(pnlPoleEdycji.Location.X, pnlPoleEdycji.Location.Y - 28)
                        Me.Height = CInt(Me.Height - 28)
                    End If
                    Exit For
                End If
            Next
        End If


    End Sub

    Private Sub lstRodzic_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstRodzic.SelectedIndexChanged

        If mvarWyznZmianyZaznaczeniaLstRodzic Then
            lstPotomek.ClearSelected()
            ZaznaczenieLstRodzic()
        End If

        '  mvarWyznZmianyZaznaczeniaLstRodzic = True

    End Sub

  
    Private Sub ZaznaczenieLstPotomek()

        Dim lvarIndex As Integer
        Dim lvarWsp As Integer = 0
        If lstPotomek.SelectedItems.Count > 0 Then
            AktywnoscGrbDaneMaszyny()
            If UCase(Trim(txtMaszyna.Text)) = "PIEC" Then
                txtTemperatura.Text = Replace(CType(lstPotomek.SelectedItem, clsInhTrDrut).ParametrMaszyny, ".", ",")
            Else
                txtPredkoscMaszyny.Text = Replace(CType(lstPotomek.SelectedItem, clsInhTrDrut).ParametrMaszyny, ".", ",")
            End If
            lvarIndex = cmbPracownik.FindString(CType(lstPotomek.SelectedItem, clsInhTrDrut).Pracownik.Nazwisko)
            cmbPracownik.SelectedIndex = lvarIndex
            lvarIndex = cmbMaszyna.FindString(CType(lstPotomek.SelectedItem, clsInhTrDrut).Maszyna.Nazwa)
            cmbMaszyna.SelectedIndex = lvarIndex
            lvarIndex = cmbPakowanie.FindString(CType(lstPotomek.SelectedItem, clsInhTrDrut).Pakowanie.Nazwa)
            cmbPakowanie.SelectedIndex = lvarIndex
            txtWymiarMax.Text = Replace(CType(lstPotomek.SelectedItem, clsInhTrDrut).WymiarMax, ".", ",")
            txtWymiarMin.Text = Replace(CType(lstPotomek.SelectedItem, clsInhTrDrut).WymiarMin, ".", ",")
            txtUwagi.Text = CType(lstPotomek.SelectedItem, clsInhTrDrut).Uwagi

            For Each lvarRodzic As clsTrRodzic In CType(lstPotomek.SelectedItem, clsInhTrDrut).Rodzic
                If lvarWsp = 0 Then
                    lvarWsp = 46
                Else
                    lvarWsp = mvarTextList.Item(mvarTextList.Count - 1).Location.Y
                    grbInformacje.Height = grbInformacje.Height + 28
                    grbPoleEdycji.Height = grbPoleEdycji.Height + 28
                    grbPrzyciski.Location = New Point(grbPrzyciski.Location.X, grbPrzyciski.Location.Y + 28)
                    pnlPoleEdycji.Location = New Point(pnlPoleEdycji.Location.X, pnlPoleEdycji.Location.Y + 28)
                    Me.Height = CInt(Me.Height + 28)
                End If
                Dim lvarLbl As New Label
                Dim lvarText As New TextBox()
                lvarLbl.Location = New Point(187, lvarWsp + 28)
                lvarText.Location = New Point(262, lvarWsp + 28)
                lvarLbl.Size = New Size(67, 20)
                lvarText.Size = New Size(94, 20)

                lvarLbl.Text = "waga(" & lvarRodzic.DrutRodzicId & "):"
                lvarText.Text = Replace(lvarRodzic.Waga, ".", ",")
                lvarText.Font = New Font(Me.Font, FontStyle.Bold)
                grbPoleEdycji.Controls.Add(lvarLbl)
                grbPoleEdycji.Controls.Add(lvarText)

                If mvarWyznMaterialProdukcyjny Then
                    lvarText.Tag = New clsInhTrMaterialProdukcyjny()
                    For I As Integer = 0 To lstRodzic.Items.Count - 1
                        If CType(lstRodzic.Items(I), clsInhTrMaterialProdukcyjny).Id = lvarRodzic.DrutRodzicId Then
                            lstRodzic.SetSelected(I, True)
                            lvarText.Tag = lstRodzic.Items(I)
                            mvarLblList.Add(lvarLbl)
                            mvarTextList.Add(lvarText)
                        End If
                    Next

                Else
                    lvarText.Tag = New clsInhTrDrut()
                    For I As Integer = 0 To lstRodzic.Items.Count - 1
                        If CType(lstRodzic.Items(I), clsInhTrDrut).Id = lvarRodzic.DrutRodzicId Then
                            lstRodzic.SetSelected(I, True)
                            lvarText.Tag = lstRodzic.Items(I)
                            mvarLblList.Add(lvarLbl)
                            mvarTextList.Add(lvarText)
                        End If
                    Next
                End If

            Next

            Select Case CType(lstPotomek.SelectedItem, clsInhTrDrut).OpcjaId
                Case 1
                    chkProdukcja.Checked = True
                Case 2
                    chkMagazyn.Checked = True
                Case 3
                    chkKosz.Checked = True
                Case 4
                    chkKontrola.Checked = True
            End Select

            AktywnoscGrbDaneMaszyny()

        End If

    End Sub

    Private Sub lstPotomek_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstPotomek.SelectedIndexChanged

        Wyczysc()
        mvarWyznZmianyZaznaczeniaLstRodzic = False
        lstRodzic.ClearSelected()
        ZaznaczenieLstPotomek()

    End Sub


#Region "Checked"

    Private Sub chkProdukcja_CheckedChanged(sender As Object, e As EventArgs) Handles chkProdukcja.CheckedChanged
        If chkProdukcja.Checked Then
            chkMagazyn.Checked = False
            chkKosz.Checked = False
            chkKontrola.Checked = False
        End If
    End Sub

    Private Sub chkMagazyn_CheckedChanged(sender As Object, e As EventArgs) Handles chkMagazyn.CheckedChanged
        If chkMagazyn.Checked Then
            chkProdukcja.Checked = False
            chkKosz.Checked = False
            chkKontrola.Checked = False
        End If
    End Sub

    Private Sub chkKosz_CheckedChanged(sender As Object, e As EventArgs) Handles chkKosz.CheckedChanged
        If chkKosz.Checked Then
            chkProdukcja.Checked = False
            chkMagazyn.Checked = False
            chkKontrola.Checked = False
        End If
    End Sub


    Private Sub chkKontrola_CheckedChanged(sender As Object, e As EventArgs) Handles chkKontrola.CheckedChanged
        If chkKontrola.Checked Then
            chkProdukcja.Checked = False
            chkMagazyn.Checked = False
            chkKosz.Checked = False
        End If
    End Sub

#End Region

    Private Sub frmOperacja_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
        If Not mvarWyznTylkoDoOdczytu Then
            mvarBlokowanie.Unlock()
        End If
        mvarDbHolder.Close()
    End Sub


End Class